; FloorMap interface code...
;
const
 FloorMapList=16
 BadRoomOK=1 ;must be 1 for game

table
 FloorMap=16 ;transient stuff for init

var
 HighestPossible
 MarginX SizeX MarginZ SizeZ
 MapNumber    ;ascii suffix of filename (0..9, A..Z)
 RoomNum      ;room (XZH) number
 CurrentRoom  ;offset of room data
 Modified     ;non zero if FloorMap() altered since last save
 CurrentCache ;address to start load/save
 TestPointX TestPointY 

begin
.InitFloors
 MarginZ=0
 SizeZ=0
 MarginX=0
 SizeX=0
 RoomNum=0
 CursorZ=64
 CursorX=0
 CursorH=64
 CurrentCache=0
 MapNumber=0
 v1=220 ;* 400 ; table size (24 rooms)
 gosub @FCinitFloorCache
 return
;---
.ChangeACBdx4
 push dx4
  gosub @FindObjectNumber
  gosub @DecodeHeader
 pop dx4
 dv1=ObjectNumber
 gosub @SUAChangeACB
 return
;---
.LoadMap
 gosub @SetFileName
 &FloorMap(CurrentCache)=c0
 v1=FloorMapList
 v2=CurrentCache ;offset
 gosub @VecMCloadFile
 Modified=0
 return
;---
.SetFileName
 v1=70 ;'f'
 list17(8)=v1
 v1=76 ;'l'
 list17(9)=v1
 v1=79 ;'o'
 list17(10)=v1
 v1=79 ;'o'
 list17(11)=v1
 v1=82 ;'r'
 list17(12)=v1
 list17(13)=MapNumber
 v1=46 ;'.'
 list17(14)=v1
 v1=68 ;'d'
 list17(15)=v1
 v1=65 ;'a'
 list17(16)=v1
 v1=84 ;'t'
 list17(17)=v1
 list17(18)=c0 ; put a terminator on, for benefit of Amiga etc.
 return
;---
;RoomNum is XZH number of room
;returns RoomNum=0, CurrentRoom=terminator word if no floor map
;        CurrentRoom=FloorData
;
.FindRoom
 CurrentRoom=CurrentCache
.FR1
 &v1=FloorMap(CurrentRoom)
 if v1=RoomNum then Found
 if v1=0 then @EOF
 add CurrentRoom,c2
 &v2=FloorMap(CurrentRoom) ;Structure length-2
 add CurrentRoom,v2
 goto FR1
;
.Found
 add CurrentRoom,c4
 &MarginX=FloorMap(CurrentRoom)
 add CurrentRoom,c2
 &MarginZ=FloorMap(CurrentRoom)
 add CurrentRoom,c2
 &SizeX=FloorMap(CurrentRoom)
 add CurrentRoom,c2
 &SizeZ=FloorMap(CurrentRoom)
 add CurrentRoom,c2
 return
;
.EOF
 RoomNum=0
 return
;---
